#include "toast.h"
#include <QScreen>
#include <QVBoxLayout>
#include <QLabel>
#include <QApplication>
#include <QTimer>

Toast::Toast(const QString &text)
{
    // 1. 设置窗口的基本参数 - 更小的尺寸
    this->setFixedSize(300, 60);  // 更紧凑的尺寸
    this->setWindowTitle("消息通知");
    this->setWindowIcon(QIcon(":/resource/LOGO.png"));
    this->setAttribute(Qt::WA_DeleteOnClose);
    // 改进样式：添加圆角、阴影和浅色背景
    this->setStyleSheet("QDialog { "
                        "background-color: rgb(188, 250, 122); "  // 浅绿色背景
                        "border: 1px solid #EEEEEE; "
                        "box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); "
                        "}");
    // 去掉窗口的标题栏并保持窗口置顶
    this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);

    // 2. 设置窗口位置到屏幕右下角
    QScreen* screen = QApplication::primaryScreen();
    if (screen) {
        QRect screenGeometry = screen->availableGeometry();
        int x = screenGeometry.width() - this->width();
        int y = screenGeometry.height() - this->height();
        this->move(x, y);
    }

    // 3. 添加布局管理器
    QVBoxLayout* layout = new QVBoxLayout();
    layout->setSpacing(0);
    layout->setContentsMargins(8,4, 8, 4);  // 适当的内边距
    this->setLayout(layout);

    // 4. 创建显示文本的 Label - 优化文字样式
    QLabel* label = new QLabel();
    label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    label->setAlignment(Qt::AlignCenter);
    label->setStyleSheet("QLabel { font-size: 16px; }");
    label->setText(text);
    // label->setWordWrap(true);  // 允许文本换行
    layout->addWidget(label);

    // 5. 实现 2s 之后自动关闭
    QTimer* timer = new QTimer(this);
    connect(timer, &QTimer::timeout, this, [=]() {
        timer->stop();
        this->close();
    });
    timer->start(3000);  // 改为2秒关闭
}

void Toast::showMessage(const QString &text)
{
    // 创建临时标签用于计算文本宽度
    QLabel tempLabel;
    tempLabel.setStyleSheet("font-size: 14px;");
    // 窗口宽度的90%作为最大文本宽度
    const int maxTextWidth = 300 * 0.9; // 300是窗口固定宽度
    // 设置临时标签文本并获取其宽度
    tempLabel.setText(text);
    int textWidth = tempLabel.fontMetrics().boundingRect(text).width();

    // 如果文本宽度超过最大宽度，则进行截断处理
    QString displayText = text;
    if (textWidth > maxTextWidth)
    {
        // 计算可以显示的最大字符数并添加省略号
        int maxChars = tempLabel.fontMetrics().maxWidth() > 0? maxTextWidth / tempLabel.fontMetrics().maxWidth(): 20; //  fallback值
        // 确保不会截取到负数
        maxChars = qMax(1, maxChars - 1); // 减1是为了给省略号留出空间
        // 截断文本并添加省略号
        displayText = text.left(maxChars) + "...";
    }
    // 显示处理后的文本
    Toast* toast = new Toast(displayText);
    toast->show();
}
